/**
 * @作者 伟子涵
 * @微信公号 搬砖暗夜码农
 * @开源项目 $ https://gitee.com/zhouwei5208888
 * @我的博客 $ http://itzhouwei.com
 * @创建时间 2023/7/13 11:31
 */
package com.itzhouwei.bio;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @description: BIO 代码
 * @author：zw，微信：yingshengzw
 * @date: 2023/7/13
 * @Copyright： 公众号：搬砖暗夜码农 | 博客：https://itzhouwei.com - 沉淀、分享、成长，让自己和他人都能有所收获！
 */
@SuppressWarnings("all")
public class SocketServer {

    //1.0 服务端在处理完第一个客户端的所有事件之前，无法为其他客户端提供服务。
    //2.0 会产生大量空闲线程，浪费服务器资源。
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(9006);
        while (true){
            System.err.println("等待连接 ...." );
            //阻塞方法
            Socket accept = serverSocket.accept();
            System.out.println("有客户端连接了" );
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        handler(accept);
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }
            }).start();
        }
    }

    private static void handler(Socket clientSocket) throws Exception {
//        while (true){
        byte[] bytes = new byte[1024];
        System.out.println("准备read..");
        //接收客户端的数据，阻塞方法，没有数据可读时就阻塞
        int read = clientSocket.getInputStream().read(bytes);
        System.out.println("read完毕。。");
        if (read != -1) {
//                int i = (int) (1 + Math.random() * (10 - 1 + 1));
//                System.out.println("收到客户端: " + Thread.currentThread().getName() + "收到了数据开始休眠");
//                Thread.sleep(i*1000L);
            System.out.println("接收到客户端的数据：" + new String(bytes, 0, read));
        }
//            clientSocket.getOutputStream().write("HelloClient".getBytes());
//            clientSocket.getOutputStream().flush();
//        }

    }
}
